管理大型 Python 工程结构

Python 语言十分易学,随便创建一个文件即可编码。甚至很多优秀的科学计算项目,仅一个 Jupyter Notebook 搞定。但是,对于复杂工程而言,单文件容纳不下了,需要大量的源代码文件和模块构成。

在其他语言中,比如 Node.js 或者 DartFlutter),通过官方脚手架能够方便地搭建一个标准化工程。对于开发者来说,只需要基于此添砖加瓦、导入依赖即可。

标准化的 Python 工程是怎么样的呢?如何开发一个包含有多文件、多模块的大型 Python 工程呢?

在本文中,记录了我的探索。

Kenneth Reitz 的工程布局

Kenneth Reitz 是谁?他是 requests、pipenv、pep8.org 的作者,Python 大神。他曾在 2013 年推荐了一种 Python 工程布局。

参考文献:

  1. Repository Structure and Python》:Kenneth Reitz 的原始博客
  2. Structuring Your Project — The Hitchhiker's Guide to Python (python-guide.org)》:对原始博客进行进一步解读。

本文中不再赘述,直接参见这两篇文章即可。

Python 虚拟环境

Python 虚拟环境是进行 Python 开发的最佳实践。针对每个 Python 工程,都创建一个与之对应的虚拟 Python 环境,在环境中管理该工程的依赖。这样,不同 Python 工程的依赖相互隔离,避免了发生冲突的情况。

在下一节要介绍的 Python 依赖管理工具中,都具备了管理 Python 虚拟环境的功能。

PEP 518

Python 本身, 也针对工程化和依赖管理进行了完善。

PEP 518 中,引入新的 pyproject.toml 来取代 Pipfile、requirements.txt、setup.py、setup.cfg、MANIFEST.in 等配置文件。

在后续的 PEP 621 得到了进一步扩展。

Python 依赖管理工具

得益于强大的生态,Python 下也有许多脚手架工具,能够帮助开发者创建更符合标准的 Python 工程,以及更方便地管理依赖。

比如,Kenneth ReitzPipenv 就是这样一个脚手架工具,十分强大。

除了 Pipenv 外,此类工具还有很多:PoetryPDMhatch

我目前使用 Poetry,后面准备分别尝试下 PDMhatch。至于哪个更好,则仁者见仁智者见智,可以参阅如下参考文献:

参考文献:

  1. pipenv vs. virtualenv vs. poetry vs. pyenv vs. pip - Ritza Articles
  2. 相比 Pipenv,Poetry 是一个更好的选择 - 知乎
  3. 再見了 pip!最佳 Python 套件管理器——Poetry 完全入門指南 - Code and Me
  4. I move from pipenv to poetry in 2023 - Am I right ? - DEV Community
  5. Python包管理工具之 PDM-腾讯云开发者社区-腾讯云
  6. 10.2 细数 Python 虚拟环境的管理方案 - 少数派
  7. Pipenv, pip-tools, PDM, or Poetry? : r/Python
  8. 初見 PDM,一套現代化的 Python 依賴管理工具

实际 Python 工程结构

经过前面的介绍,实际 Python 项目工程的结构如何呢?这一节中,我会找一些知名 Python 项目,来进行对比。

qutebrowser

第一个选择的案例是 qutebrowser,这是一个使用 Python 开发的,基于 PyQt 的浏览器,特点是基于键盘驱动。

项目布局如下:


本文作者:Maeiee

本文链接:管理大型 Python 工程结构

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!